New Transaction
The New Transaction webhook notifies the subscriber with transaction details whenever a new transaction is recorded in the XD Ledger.
The subscriber must return a 200 response to confirm successful delivery of the callback notification. Any response other than 200 is treated as a failure, and the system will retry sending the notification according to the configured retry settings until a 200 response is received. If no 200 response is received after the configured attempts, the subscription for this event will be moved to a disabled state. The subscription can be re-enabled later if required.
Example
Request Parameters
| Parameter | Description |
|---|---|
| source Mandatory | String Source or origin of the transaction Constant value: "PL" |
| eventId Mandatory | String Identifier for the event associated with the transaction Sample value: "EVT1358243" |
| eventName Mandatory | String Name of the event Constant value: "Transaction.NEW" |
| Payload Mandatory | Object |
| transactionType | String Specifies the type of transaction Sample value: "PG_DEPOSIT" |
| referenceID | String Unique reference ID of transaction that helps to track the transaction Sample value: "PGDEPOSITREF0000004952" |
| postedDate | String Date and time of the transaction initiated Sample value: "2022-07-02T21:00:01Z" |
| status | String Current status of the transaction Sample value: "COMPLETED" |
| instructedAmount | Number Total amount of the transaction Sample value: 1360 |
| instructedCurrency | String Currency of the instructed amount Sample value: "USD" |
| credit | Boolean Indicates whether the transaction is credit transaction Sample value: true |
| avalBalance | Number Balance amount in the account Sample value: 1079284 |
| customerID | String ID of the customer account Sample value: "100000001283309" |
| debtorAccount | Object |
| reference | String Reference ID of the transaction debited from the debtor account Sample value: "txnpgdep315" |
| settlementAccountNumber | String Account number of the account from which the amount is debited Sample value: "100548596389492" |
| settlementAccountName | String Account name associated with the settlement account Sample value: "PLCBW1EFTCOLLECTIONS" |
| creditorAccount | Object |
| accountNumber | String Beneficiary account number which is credited Sample value: "200872238634465" |
| holderName | String Account holder name of the creditor account Sample value: "Trent Boult" |
| customerAccountName | String Account name associated with the customer account Sample value: "Wallet Account 1" |
| customerAccountType | String Type of customer account Sample value: "WALLET" |
| holderId | String Unique ID of the account holder Sample value: "112567846" |
| holderIdType | String Type of identification used for holder ID Sample value: "SSN" |
| transactionNumber | String Unique number of the transaction Sample value: "QA00000004568034" |
| subTransactionType | String More granular subtype of transaction. Sample Value: ATM_DEPOSIT, POS_PURCHASE, ONLINE_PAYMENT |
| ledgerTxnNumber | String Internal ledger reference number. Sample Value: QA00000002970003 |
| channel | String Payment channel used. Sample Values: VISA_DPS, MASTERCARD, ACH, UPI, NEFT, SWIFT |
| cardAcceptor | String Merchant or institution name. Sample Value: FLIPKART INC |
| cardProduct | String ID of card product. Sample Value: 2c6b841a-dfc1-4a6a-a12a-13c21035b5be |
| mcc | String Merchant Category Code (ISO 18245). Sample Value: 5812, 6011, 5411 |
| overDraft | Boolean Indicates whether the transaction was processed using overdraft. Appears only when overdraft rules are breached. Sample Value: true / false |
| overAuth | Boolean Indicates whether the transaction value exceeded a pre-authorization. Appears only for COMPLETION transactions with higher value than the pre-authorized amount. Sample Value: true / false |
| limit | Object Limit breach details. Appears only when a configured transaction limit is breached. Sample Value: See Limit Object Fields |
| LimitType | String The type of limit breached. Sample Value: DAILY, MONTH, YEAR, PER_TRANSACTION |
| currentValue | String Current accumulated value at breach. Sample Value: 2400 |
| limitAmount | Integer Configured threshold amount. Sample Value: 100 |
| limitCount | Integer Number of times limit was hit. Sample Value: 1 |
| errorMsg | String Error message associated with the transaction Sample value: "per month transaction limit breached", "per year transaction limit breached", "per day transaction limit breached", "per transaction limit breached" |
| errorCode | String Error Code Sample value: "PER_MONTH_TRANSACTION_LIMIT_BREACHED", "PER_YEAR_TRANSACTION_LIMIT_BREACHED", "PER_DAY_TRANSACTION_LIMIT_BREACHED", Sample value: "PER_TRANSACTION_LIMIT_BREACHED" |
| signature Mandatory | String Signature for request validation Sample value: "signature" |
Account Object Fields (for creditorAccount and debtorAccount):
| Field | Description |
|---|---|
| accountNumber | Number Unique account number. Sample Value: 200667482425912 |
| customerAccountName | String Account name. Sample Value: CASH Account |
| customerAccountType | String Account type. Sample Value: SAVINGS, CHECKING, CURRENT, LOAN, CREDIT_CARD |
| holderId | String Account holder unique identifier. Sample Value: 541236528 |
| holderIdType | String Type of identifier. Sample Value: SSN, CIF, CUSTOMER_ID, PASSPORT |
| holderName | String Holder name. Sample Value: ach_fed |
| institutionId | String Institution ID or routing number. Sample Value: 101115399 |
Limit Object Fields (appears only when a limit breach occurs):
| Field | Description |
|---|---|
| LimitType | The type of limit breached. Sample Value: DAILY, MONTH, YEAR, PER_TRANSACTION |
| currentValue | Current accumulated value at breach. Sample Value: 2400 |
| limitAmount | Configured threshold amount. Sample Value: 100 |
| limitCount | Number of times limit was hit. Sample Value: 1 |
Body
{
"source": "VISA_DPS",
"eventId": "EVT1358243",
"eventName": "Transaction.NEW",
"payload": {
"transactionType": "ATM_DEPOSIT",
"subTransactionType": "ATM_DEPOSIT",
"referenceID": "f3147285e1d146a5b522b0edeb80219f",
"postedDate": "2025-09-15T18:38:00.102368673+05:30",
"status": "REJECT",
"instructedAmount": 1200,
"instructedCurrency": "USD",
"credit": true,
"customerID": "100000000108001",
"debtorAccount": {},
"creditorAccount": {
"accountNumber": "200667482425912",
"customerAccountName": "CASH Account",
"customerAccountType": "SAVINGS",
"holderId": "541236528",
"holderIdType": "SSN",
"holderName": "ach_fed",
"institutionId": "101115399"
},
"transactionNumber": "QA00000002970003",
"ledgerTxnNumber": "QA00000002970003",
"channel": "VISA_DPS",
"cardAcceptor": "FLIPKART INC",
"cardProduct": "2c6b841a-dfc1-4a6a-a12a-13c21035b5be",
"overDraft": false,
"overAuth": false,
"limit": {
"LimitType": "MONTH",
"currentValue": 2400,
"limitAmount": 100,
"limitCount": 1
},
"mcc": "9898",
"error": {
"code": "PER_MONTH_TRANSACTION_LIMIT_BREACHED",
"message": "per month transaction limit breached"
}
},
"signature": "{{Signature}}"
}
Response: 200
{
//The response for this callback notification from the subscriber should be 200 for a successfull delivery of notification. If the response is other than 200, it is meant as failed status of notification. Hence, the notification is sent for ‘n’ number of times till getting the response as 200. If still the response is not 200, the subscription for this event will be cancelled.
}